import { ParamsShortError } from "./errors";

/**
 * 上下文
 */
export class Context {
    // 所有的参数
    public args: string[];
    // 当前参数的下标，从1开始 忽略第一个参数(ID)
    private index = 2;
    // 待返回的消息
    private messages: string[] = []

    constructor(public text: string) {
        this.args = text.split(/\s+/); // 使用任意长度空白符进行分割  
        /**
         * 应为 role 的生命周期大于 context
         * 所以在 role 内部想正常使用 调用 context 比较困难
         * 
         * 解决方法，因为一个 context 都对应着一个 role, 我们称这个 role 为 主角。
         * 当这个主角内部的 context 没有被清空，那么它是繁忙状态，在接受后续 context;
         */
    }

    /** 获取唯一ID */
    getId() {
        return this.args[0];
    }

    /** 返回用户的名字 */
    getName() {
        return this.args[1];
    }

    /**
     * 获取下一个参数。注意异常
     * @returns 
     * @throws {ParamsShortError}
     */
    nextParam() {
        if (this.index >= this.args.length) {
            throw new ParamsShortError()
        } else {
            return this.args[this.index++]
        }
    }

    /** 判断是否有下一个参数 */
    hasNextParam() {
        return this.index < this.args.length;
    }
}